package com.medsys.dao;

import java.io.Serializable;
import java.util.List;

import org.hibernate.HibernateException;
import org.hibernate.Query;
import org.hibernate.Session;

import com.medsys.model.Medico;

/**
 * Classe para acesso a base de dados da classe {@link Medico}.
 * @author Felipe Lauksas
 *
 */
public class MedicoDAO extends BaseDAO {
	/**
	 * Construtor passando a sess�o j� criada. 
	 * @param session criada por {@link DAOFactory}.
	 */
	public MedicoDAO(Session session) {
		super(session);		
	}		
	/**
	 * M�todo salva um objeto {@link Medico} no banco de dados.
	 * @param medico do tipo {@link Medico}.
	 * @return {@link Medico} persistido.
	 * @throws Exception
	 */
	public Medico salvar (Medico medico) throws Exception{
		try {
			medico = (Medico) this.session.merge(medico);
		} catch (HibernateException e) {			
			throw new Exception(e);
		}
		return medico;
	}
	/**
	 * M�todo alterar um objeto {@link Medico} no banco de dados.
	 * @param medico do tipo {@link Medico}.
	 * @throws Exception
	 */
	public void alterar(Medico medico) throws Exception{
		try {
			this.session.update(medico);
		} catch (HibernateException e) {			
			throw new Exception(e);
		}
	}
	/**
	 * M�todo para listar todos os objetos {@link Medico} que est�o no banco de dados.
	 * @return {@link List} com objetos {@link Medico}.
	 * @throws Exception
	 */
	@SuppressWarnings("unchecked")
	public List<Medico> listarTodos() throws Exception{
		List<Medico> listMedicos = null;
		try {
			listMedicos = this.session.createCriteria(Medico.class).list();
		} catch (HibernateException e) {			
			throw new Exception(e);
		}
		return listMedicos;
	}
	/**
     * Pesquisa um medico pela sua chave
     * @param Integer id
     * @return {@link Medico} medico
     */
    public Medico pesquisarPorId(Serializable id){                
        return (Medico) this.session.get(Medico.class, id);
    }
    
    /**
     * Pesquisa um medico pelo CRM
     * @param crm
     * @return {@link Medico} medico
     */
    public Medico pesquisarPorCrm(String crm){    
        Query query = this.session.createQuery("select m from Medico m where m.crm = \'"+crm+"\'");
        return (Medico) query.uniqueResult();
    }
}
